import { getTaskId } from '@/utils/util'
import { ElMessage, ElNotification } from 'element-plus'
import { AdminSyncTestExampleListAndData, AdminExampleCheckSyncStatus } from "@/api/test_case";

export default {
  namespaced: true, // 启用命名空间
  state: {
    taskId: getTaskId(),//同步任务的ID
    isSyncing: false,//是否正在同步
    timer: null,//定时器
    syncStatus: null, // 同步状态：null-未知，true-成功，false-失败
  },
  mutations: {
    // 设置任务ID
    SET_TASK_ID(state, taskId) {
      state.taskId = taskId
      localStorage.setItem('taskId', taskId)
    },
    // 开始同步
    START_SYNC(state) {
      state.isSyncing = true
    },
    // 停止同步
    STOP_SYNC(state) {
      state.isSyncing = false
      if (state.timer) {
        clearInterval(state.timer)
        state.timer = null
      }
    },
    // 设置同步状态
    SET_SYNC_STATUS(state, status) {
      state.syncStatus = status
    },
    // 设置定时器
    SET_TIMER(state, timer) {
      state.timer = timer
    }
  },
  actions: {
    // 启动同步任务
    async startSyncTask({ state, commit, dispatch }, payload) {
      console.log('startSyncTask');
      if (state.isSyncing) return ElMessage.warning("当前同步任务还在执行中，请勿重复操作！");

      let obj = {
        pageNum: 1,
        pageSize: 2000,
        queryParams: {},
      };
      try {
        const res = await AdminSyncTestExampleListAndData(obj);
        ElMessage.success("同步已成功发起");
        console.log("res", res);
        // 将同步的ID存起来
        commit('SET_TASK_ID', res.taskId)
        // 告知用户
        ElNotification({
          type: 'success',
          title: "温馨提示",
          message: "正在同步中，需要耐心等待",
          duration: 0,
          showClose: false,
          offset: 0,
          position: 'bottom-left',
        });
        // 开始检查同步状态
        dispatch('startSyncCheck')
      } catch (error) {
        console.error('启动同步任务失败:', error);
        ElMessage.error('启动同步任务失败');
      }
    },
    // 启动同步检查
    async startSyncCheck({ state, commit, dispatch }) {
      // 如果已经在同步中，不重复启动
      if (state.isSyncing) return

      // 如果没有taskId，不启动
      if (!state.taskId) return

      commit('START_SYNC')

      // 立即检查一次
      const isFinished = await dispatch('checkSyncStatus')
      console.log('isFinished', isFinished);
      
      if (isFinished) {
        return
      }

      // 设置定时器，每5秒检查一次
      const timer = setInterval(async () => {
        const isFinished = await dispatch('checkSyncStatus')
        if (isFinished) {
          commit('STOP_SYNC')
        }
      }, 6000)

      commit('SET_TIMER', timer)
    },
    // 检查同步状态
    async checkSyncStatus({ state, commit }) {
      try {
        const res = await AdminExampleCheckSyncStatus({ taskId: state.taskId });
        // 如果res 为 'status: running'，则同步还在进行中
        if (res === 'status: running') {
          // 同步中
          return false
        } else {
          // 同步成功
          commit('SET_SYNC_STATUS', true)
          commit('STOP_SYNC')
          localStorage.removeItem('taskId')

          // 关闭通知
          ElNotification.closeAll()

          // 显示成功消息
          ElMessage.success('数据同步完成，刷新浏览器可获取最新数据')

          return true
        }
      } catch (error) {
        console.error('检查同步状态失败:', error)
        // 同步失败
        commit('SET_SYNC_STATUS', false)
        commit('STOP_SYNC')
        localStorage.removeItem('taskId')

        // 关闭通知
        ElNotification.closeAll()

        // 显示失败消息
        ElMessage.error('数据同步失败')

        return true
      }
    },
  }
}  